<?php
/**
 * Repositorio PostgreSQL para entidade Situacao 
 * @author leandrorio
 * @since 25/04/2010
 * @version 1.0
 */
class SituacaoRepositorio implements SituacaoInterface {
	# DECLARACAO DE VARIAVEIS #
	/**
	 * @var PDOSingleton $Conexao
	 */
	private $Conexao;
	# ####################### #
	
	
	# FUNCOES MAGICAS #
	/**
	 * Funcao __construct
	 */
	public function __construct() {
		$this->Conexao = PDOSingleton::getInstancia();
	}
	# ############### #
	
	
	# FUNCOES DE PERSISTENCIA #
	/**
	 * Funcao inserir
	 * @access public
	 * @param Situacao $Situacao
	 */
	public function inserir(Situacao $Situacao);
	/**
	 * Funcao alterar
	 * @access public
	 * @param Situacao $Situacao
	 */
	public function alterar(Situacao $Situacao);
	/**
	 * Funcao deletar
	 * @access public
	 * @param Situacao $Situacao
	 */
	public function deletar(Situacao $Situacao);
	# ####################### #
	
	
	# FUNCOES DE CONSULTA #
	/**
	 * Funcao existe
	 * @param $codigo
	 * @return boolean
	 */
	private function existe($codigo) {
		try {
			$sql = "SELECT codigo ";
			$sql.=   "FROM sppl.situacao ";
			$sql.=  "WHERE codigo = " . $this->Conexao->quote($codigo) . " ";
			$rs = $this->Conexao->query($sql);

			return (count($rs) > 0);
			
		} catch (Exception $E) {
			throw new SituacaoErroGeral();
		}
	}
	/**
	 * Funcao Buscar
	 * @access public static
	 * @param $codigo
	 * @param $recursivo=false
	 * @return Situacao $Situacao
	 */
	public static function buscar($codigo, $recursivo=false) {
		try {
			$sql = "SELECT codigo, descricao, cor, tabela, dataUltimaAlteracao, empresa, matriculaUsuario ".
  						"FROM sppl.situacao ".
			       "WHERE codigo = " . $this->Conexao->quote($codigo) . " ";
			$row = $this->Conexao->queryFetchRowAssoc($sql);
			
			if (count($row) > 0) {
				if ($row["dataUltimaAlteracao"]) {
					$DataUltimaAlteracao = date('d/m/Y H:i:s', $row["dataUltimaAlteracao"]); 
				}
				
				$Situacao = new Situacao($row["codigo"], $row["descricao"], $row["cor"], $row["tabela"], $DataUltimaAlteracao);
				
				if ($recursivo) {
					$Situacao->setUsuario(Usuario::buscar($row["empresa"], $row["matriculaUsuario"]));
				} 
				return $Situacao;
			} else {
				throw new SituacaoInexiste();
			}			
		} catch (Exception $E) {
			throw new SituacaoErroGeral();
		}
	}
	/**
	 * Funcao Consultar
	 * @access public
	 * @param Situacao $Situacao
	 * @param $recursivo=false
	 * @return Situacao[] $Situacao
	 */
	public function consultar(Situacao $Situacao, $recursivo=false) {
		//TODO Continuar aki
	}
	# ################### #
}
?>